<picture>
響應式圖片元素可以在 HTML 裡放入適合不同解析度的圖片,當符合特定解析度時,就會顯示對應的圖片 ( 俗稱的響應式設計 ),這篇教學會介紹 <picture>
響應式圖片元素以及相關用法。
原文參考:響應式圖片 picture
<audio>
<picture>
響應式圖片元素可以在 HTML 裡使用 <source>
放入適合不同解析度的圖片,當符合特定解析度時,就會顯示對應的圖片 ( 俗稱的響應式設計 )。
<picture>
屬於「容器元素」,需要有「起始標籤」以及「結束標籤」。<picture>
顯示類型為「inline-block 行內元素裡包覆塊級元素」,預設不會強制換行,寬度超過父元素寬度才會換行。<source>
只能是<video>
或<audio>
的子元素。
使用 <picture>
需要同時使用 <source>
和 <img>
元素,<source>
具有 srcset 和 media 屬性,符合指定螢幕的解析度時 ( media ),就會顯示對應的圖片 ( srcset ),如果不符合條件,則會顯示 <img>
的圖片,基本用法如下:
<picture>
<!-- 最小寬度 400px 時顯示 photo-400.jpg -->
<source srcset="photo-400.jpg" media="(min-width:400px)">
<!-- 最小寬度 300px 時顯示 photo-300.jpg -->
<source srcset="photo-300.jpg" media="(min-width:300px)">
<!-- 最小寬度小於 300px 時顯示 photo.jpg -->
<img src="photo.jpg">
</picture>
例如下方的 HTML 開啟後,會使用 <picture>
在網頁中放入三張適合不同解析度的圖片,當畫面寬度不同時,就會顯示不同圖片 ( 圖片來源:Google Doodles )。
<picture>
<source srcset="https://www.google.com/logos/doodles/2022/st-andrews-day-2022-6753651837109549-2x.png" media="(min-width:400px)">
<source srcset="https://www.google.com/logos/2022/lawson/r1130/lawson_cta.png" media="(min-width:300px)">
<img src="https://www.google.com/logos/doodles/2022/thanksgiving-2022-6753651837109542.5-2x.png" width="200">
</picture>
<picture>
樣式使用 <picture>
之後,等同於將對應的網址放入 <img>
的 src 屬性中,因此只要設定 <img>
的樣式,就是設定該張圖片的樣式,例如下方的 HTML 執行後,不論圖片如何變化,都會加上寬度 5px 的黑色邊框。
<picture>
<source srcset="https://www.google.com/logos/doodles/2022/st-andrews-day-2022-6753651837109549-2x.png" media="(min-width:400px)">
<source srcset="https://www.google.com/logos/2022/lawson/r1130/lawson_cta.png" media="(min-width:300px)">
<img src="https://www.google.com/logos/doodles/2022/thanksgiving-2022-6753651837109542.5-2x.png"
style="border:5px solid #000; width:200px;">
</picture>
<picutre>
支援屬性<picutre>
本身沒有屬性設定,但需要設定 <source>
的屬性,可以設定的屬性如下:
屬性 | 說明 |
---|---|
media | 指定 media query 條件,如果不符合,就執行下一個。 |
srcset | 指定一張或多張不同尺寸大小的圖片。 |
type | 指定圖片的檔案格式 ( 例如 image/webp 或 image/jpg ),如果不符合,就執行下一個。 |
以下方的 HTML 為例,網頁開啟後會預先讀取 webp 檔案,如果不支援或檔案不存在,則使用 jpg 檔案。
<picture>
<source srcset="photo.webp" type="image/webp>
<img src="photo.jpg">
</picture>
大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^